<?php

/**
 * Фабрика режимов запуска приложения.
 *
 */
abstract class Kernel_Mode_Factory {

    /**
     * Возвращает режим запуска приложения.
     *
     * @return  Kernel_Mode_Abstract
     */
    static public function get() {
        switch (true) {
            case self::_isCli():
                return new Kernel_Mode_Cli();
            case self::_isService():
                return new Kernel_Mode_Service();
            default:
                return new Kernel_Mode_Html();
        }
    }

    /**
     * Определяет, запущено ли приложение в режиме CLI.
     *
     * @return  boolean
     */
    static private function _isCli() {
        return !isset($_SERVER['SERVER_PROTOCOL']);
    }

    /**
     * Определяет, запущено ли приложение в режиме веб-сервиса.
     *
     * @return  boolean
     */
    static private function _isService() {
        return 'XMLHttpRequest' == @$_SERVER['HTTP_X_REQUESTED_WITH'];
    }
}
